package com.situ.springboot.controller;

import com.situ.springboot.entity.Dept;
import com.situ.springboot.mapper.DeptMapper;
import com.situ.springboot.util.JSONResult;
import com.situ.springboot.util.LayUITableResult;
import com.situ.springboot.vo.DeptCountVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.Arrays;

// SSM

@Controller
@RequestMapping("/dept")
public class DeptController {
    // 要想使用DeptMapper需要通过Autowired注入过来
    @Autowired
    private DeptMapper deptMapper;

    // http://localhost:8080/dept/selectAll
    @RequestMapping("/selectAll")
    public String selectAll(Model model) {
        System.out.println("DeptController.selectAll");
        // SELECT `id`,`name`,`age`,`gender` FROM `dept`;

        // 使用Mybatis操作数据库，查询出所有的Dept信息，  封装到ArrayList集合里面
        ArrayList<Dept> list = deptMapper.selectAll();

        for (Dept dept : list) {
            System.out.println(dept);
        }

        // 浏览器发一个请求访问后台，通过Mybaits查询数据库，已经将数据查询出来
        // 接下来的操作就是把数据交给jsp页面进行展示

        // 把数据放到内存里面
        model.addAttribute("list", list);
        // 转发到页面进行展示
        return "dept_list_back.jsp";
    }

    @RequestMapping("/getDeptListPage")
    public String getDeptListPage() {
        return "/WEB-INF/jsp/dept_list.jsp";
    }

    //  /dept/selectByPage?page=1&limit=10
    // page=1默认加载第一页  limit=10每页有多少条数据，默认10条
    @RequestMapping("/selectByPage")
    @ResponseBody  // 返回json格式数据
    public LayUITableResult selectByPage(Integer page, Integer limit) {
        // 查询总的数量
        int count = deptMapper.selectTotalCount();
        // 查询当前页数据的集合
        // mysql数据库里面没有分页这个概念，他只有偏移到哪个位置，然后返回后面的多少个
        int offset = (page - 1) * limit;
        ArrayList<Dept> list = deptMapper.selectByPage(offset, limit);

        return LayUITableResult.ok(count, list);
    }

    @RequestMapping("/deleteById")
    @ResponseBody
    public JSONResult deleteById(Integer id){
        System.out.println("id: " + id);
        deptMapper.deleteById(id);

        return JSONResult.ok("删除成功");
    }

    // ids: 30,31
    @RequestMapping("/deleteAll")
    @ResponseBody
    public JSONResult deleteAll(@RequestParam(value = "ids[]") Integer[] ids){
        System.out.println("ids: " + Arrays.toString(ids));
        for (Integer id : ids) {
            deptMapper.deleteById(id);
        }

        return JSONResult.ok("删除成功");
    }

    @RequestMapping("/getDeptInsertPage")
    public String getDeptInsertPage() {
        // 转发到添加页面
        return "/WEB-INF/jsp/dept_insert.jsp";
    }

    @RequestMapping("/insert")
    @ResponseBody
    public JSONResult insert(Dept dept) {
        System.out.println(dept);
        deptMapper.insert(dept);
        // 删除完之后，重定向到查找所有界面，展示最新数据
        // return "redirect:/dept/selectAll";

        return  JSONResult.ok("插入成功");
    }

    @RequestMapping("/getDeptUpdatePage")
    public String getDeptUpdatePage(Integer id, Model model) {
        // 转发到dept_update.jsp的时候要展示出这个Dept的所有信息，
        // 所以要根据id把Dept的信息查询出来
        Dept dept = deptMapper.selectById(id);
        // 把查出来要修改的Dept对象放到内存里面
        model.addAttribute("dept", dept);

        // 转发到修改界面
        return  "/WEB-INF/jsp/dept_update.jsp";
    }

    @RequestMapping("/update")
    @ResponseBody
    public JSONResult update(Dept dept) {
        System.out.println(dept);
        deptMapper.update(dept);

        return  JSONResult.ok("修改成功");
    }

    @RequestMapping("/getDeptCountPage")
    public String getDeptCountPage() {
        return "/WEB-INF/jsp/dept_count.jsp";
    }

    @RequestMapping("/deptCount")
    @ResponseBody
    public JSONResult deptCount() {
        ArrayList<DeptCountVO> list = deptMapper.deptCount();
        return JSONResult.ok(list);
    }

}
